iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0

持倉資訊函數(Position Information Functions)

用於獲取有關你的交易帳戶中開倉項目(或持倉)的詳細信息。這些函數可以讓我們查詢和分析持倉,並在需要時自動執行特定的交易策略或管理風險。

範例函數:

  • PositionGetSymbol():此函數用於獲取當前持倉的交易符號(金融資產,如外匯貨幣對、股票、期貨等)。

  • PositionGetInteger(POSITION_TYPE):這個函數可用於獲取特定類型持倉的整數值,其中POSITION_TYPE可能的值:
    POSITION_TICKET:交易票號(持倉的唯一識別符)。
    POSITION_TYPE:持倉類型(買入或賣出)。
    POSITION_MAGIC:用於識別特定交易策略的魔術數字。

  • PositionGetDouble(POSITION_PROPERTY):這個函數可用於獲取特定持倉屬性的浮點數值,其中POSITION_PROPERTY可能的值:
    POSITION_PRICE_OPEN:開倉價格。
    POSITION_PRICE_CURRENT:當前市價。
    POSITION_SL:止損價格。
    POSITION_TP:止盈價格。

  • PositionGetInteger(POSITION_PROPERTY_INTEGER):這個函數用於獲取特定持倉整數屬性的值,例如POSITION_VOLUME(持倉數量)。

更多範例可以上https://www.mql5.com/en/docs/constants/tradingconstants/positionproperties

修改函數(Position Modification Function)

為何要建立修改函數:

  1. 模塊化和可重用性:透過創建自定義函數,可以將部位修改的邏輯封裝在一個獨立的函數中。這使得代碼更模塊化,易於管理和維護。

  2. 錯誤處理:自定義函數可以包含錯誤處理機制,確保在修改部位時能夠處理可能出現的錯誤情況。這可以提高交易系統的穩定性和安全性。

  3. 可讀性:透過為部位修改創建自定義函數,可以使交易策略代碼更易讀和更易理解。這有助於我們或其他開發者更輕鬆地查看和維護代碼。

  4. 簡化策略邏輯:透過將部位修改的邏輯提取到自定義函數中,可以在交易策略的主要邏輯中保持清晰簡潔。這有助於減少代碼的複雜性,使您的策略更容易管理和優化。

  5. 可擴展性:隨著交易策略的演進,可能需要不斷添加新的功能和規則。自定義函數可以輕鬆擴展,允許您在需要時修改或添加部位修改的邏輯,而不必修改整個策略。

創建一個修改止損價和止盈價的函數:

// 自定義函數,用於修改開倉部位的止損價和止盈價
void ModifyOpenPosition(int ticket, double newStopLoss, double newTakeProfit)
{
    if (OrderSend(ticket, 0, newStopLoss, newTakeProfit, 0, 0, 0, "", 0, clrNONE) > 0)
    {
        Print("成功修改部位 #", ticket, " 的止損價和止盈價");
    }
    else
    {
        Print("修改部位 #", ticket, " 失敗,錯誤代碼:", GetLastError());
    }
}

// 在您的交易策略中調用函數來修改開倉部位的止損價和止盈價
void OnStart()
{

    int orderTicket = 12345; 

    double newStopLoss = 1.2500;    // 新的止損價
    double newTakeProfit = 1.2700;  // 新的止盈價

    // 調用自定義函數來修改部位的止損價和止盈價
    ModifyOpenPosition(orderTicket, newStopLoss, newTakeProfit);
}

平倉

平倉是指關閉或部分關閉已經開立的交易倉位。
通常會平倉有以下幾點情況:

  • 獲利平倉:決定在價格達到一定利潤目標時關閉部分或全部部位。 這可以幫助鎖定獲利並保護投資。

  • 停損平倉:為了控制損失並保護資本,在價格達到設定的停損水準時關閉交易部位。

  • 部分平倉:交易者可以選擇只關閉部位的一部分,以實現獲利或減少風險。 一部分被平倉,而另一部分則繼續保持。

  • 逐步平倉:逐步平倉是分階段關閉交易,通常用於實現複雜的交易策略,例如加倉或減倉。

使用OrderClose平倉:

bool ClosePosition(int ticket, double lots, double price, int slippage, color clr=clrNONE)
{
   bool result = OrderClose(ticket, lots, price, slippage, clr);
   
   // 檢查操作是否成功
   if(!result)
   {
      Print("平倉失敗,錯誤碼:", GetLastError());
      return false;
   }

   return true;
}

調用平倉函數:

//OnStart()中
if(ClosePosition(ticket, lots, price, slippage))
   {
      Print("成功平倉部位 #", ticket);
   }

今天所分享的函數都可以像前幾天分享的文中一樣寫在類別裡,不過因為程式碼過於冗長,為了讓篇幅簡潔一點便使用了較精簡的寫法,不過在正式的EA中,這樣寫會忽略掉很多需要處理的因素,所以用在class中會比較便捷。


上一篇
DAY20 停損與停利
下一篇
DAY22 預掛單
系列文
從零開始的外匯自動程式交易30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言